.TH std::experimental::ranges::difference_type 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::experimental::ranges::difference_type \- std::experimental::ranges::difference_type

.SH Synopsis
   Defined in header <experimental/ranges/iterator>
   template< class I >                                                    \fB(1)\fP
   struct difference_type {};
   template< class T >                                                    \fB(2)\fP
   struct difference_type<T*>;
   template< class T >                                                    \fB(3)\fP
   struct difference_type<const T> : difference_type<std::decay_t<T>> {};
   template< class T >

       requires requires { typename T::difference_type; }                 \fB(4)\fP

   struct difference_type<T>;
   template< class T >

       requires !requires { typename T::difference_type; } &&             \fB(5)\fP
                requires(const T& a, const T& b) { {a - b} -> Integral; }

   struct difference_type<T>;

   Computes the associated difference type of the type I, if any. Users may specialize
   difference_type for a program-defined type.

   1) Primary template is an empty struct.
   2) Specialization for pointers. If T is an object type, provides a member type type
   equal to std::ptrdiff_t. Otherwise, there is no member type.
   3) Specialization for const-qualified types.
   4) Specialization for types that define a public and accessible member type
   difference_type. Provides a member type type equal to T::difference_type.
   5) Specialization for types that do not define a public and accessible member type
   difference_type but do support subtraction. Provides a member type type equal to
   std::make_signed_t<decltype(std::declval<T>() - std::declval<T>())>.

   Helper alias template

   template< class T >                                                   (ranges TS)
   using difference_type_t = typename ranges::difference_type<T>::type;

.SH Example

    This section is incomplete
    Reason: no example

.SH See also

                       specifies that a Semiregular type can be incremented with pre-
   WeaklyIncrementable and post-increment operators
                       (concept)
                       compatibility traits class that collects an iterator’s
   iterator_traits     associated types
                       (alias template)

.SH Category:
     * Todo no example
